7572e9
@@ -719,8 +719,11 @@
public class RSRpcServices implements HBaseRPCErrorHandler,
     long maxQuotaResultSize = Math.min(maxScannerResultSize, quota.getReadAvailable());
     IOException sizeIOE = null;
     Object lastBlock = null;
+    ClientProtos.ResultOrException.Builder resultOrExceptionBuilder = ResultOrException.newBuilder();
+    boolean hasResultOrException = false;
     for (ClientProtos.Action action : actions.getActionList()) {
-      ClientProtos.ResultOrException.Builder resultOrExceptionBuilder = null;
+      hasResultOrException = false;
+      resultOrExceptionBuilder.clear();
       try {
         Result r = null;
 
@@ -749,8 +752,8 @@
public class RSRpcServices implements HBaseRPCErrorHandler,
           // use it for the response.
           //
           // This will create a copy in the builder.
-          resultOrExceptionBuilder = ResultOrException.newBuilder().
-              setException(ResponseConverter.buildException(sizeIOE));
+          hasResultOrException = true;
+          resultOrExceptionBuilder.setException(ResponseConverter.buildException(sizeIOE));
           resultOrExceptionBuilder.setIndex(action.getIndex());
           builder.addResultOrException(resultOrExceptionBuilder.build());
           if (cellScanner != null) {
@@ -774,7 +777,7 @@
public class RSRpcServices implements HBaseRPCErrorHandler,
             }
           }
         } else if (action.hasServiceCall()) {
-          resultOrExceptionBuilder = ResultOrException.newBuilder();
+          hasResultOrException = true;
           try {
             com.google.protobuf.Message result =
                 execServiceOnRegion(region, action.getServiceCall());
@@ -832,8 +835,8 @@
public class RSRpcServices implements HBaseRPCErrorHandler,
             pbResult = ProtobufUtil.toResult(r);
           }
           lastBlock = addSize(context, r, lastBlock);
-          resultOrExceptionBuilder =
-            ClientProtos.ResultOrException.newBuilder().setResult(pbResult);
+          hasResultOrException = true;
+          resultOrExceptionBuilder.setResult(pbResult);
         }
         // Could get to here and there was no result and no exception.  Presumes we added
         // a Put or Delete to the collecting Mutations List for adding later.  In this
@@ -841,10 +844,10 @@
public class RSRpcServices implements HBaseRPCErrorHandler,
         // down in the doBatchOp method call rather than up here.
       } catch (IOException ie) {
         rpcServer.getMetrics().exception(ie);
-        resultOrExceptionBuilder = ResultOrException.newBuilder().
-          setException(ResponseConverter.buildException(ie));
+        hasResultOrException = true;
+        resultOrExceptionBuilder.setException(ResponseConverter.buildException(ie));
       }
-      if (resultOrExceptionBuilder != null) {
+      if (hasResultOrException) {
         // Propagate index.
         resultOrExceptionBuilder.setIndex(action.getIndex());
         builder.addResultOrException(resultOrExceptionBuilder.build());
